<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 字符串内置方法：对字符串进行操作

        // 特性：
        //     1. 字符串是由多个字符组合而成
        //     2. 字符串中的每个字符都存在类似于数组的下标指向

        let str1 = "abcdefghijkcdlmn";
        console.log("str1.length",str1.length);
        
        // 1. at() 指定下标获取对应的字符
        console.log( "str1[2]",str1[2] );  // 早期：通过运算符 [] 完成字符获取
        console.log( "str1.at(2)",str1.at(2) );
        
        // 2. endsWith()  判断指定的字符串是否以固定字符串结尾
        //    startsWith() 判断指定的字符串是否以固定字符串开头
        console.log( 'str1.startsWith("abc")' , str1.startsWith("abc") ); // true
        console.log( 'str1.startsWith("abc")' , str1.startsWith("abc",1) ); // false

        // 3. includes()	返回字符串是否包含指定值。
        console.log( 'str1.includes("g")' , str1.includes("g") );
        console.log( 'str1.includes("fgh")' , str1.includes("ghf") );
        console.log( 'str1.includes("c")' , str1.includes("c",4) );

        // 4. indexOf()	返回字符串中第一次出现指定值的第一个字符的索引（位置）。【由左向右】
        //    lastIndexOf()	返回字符串中最后一次出现指定值的索引（位置）。
        //        如果返回值为 -1 表示不存在对应的子串
        console.log( 'str1.indexOf("cd")',str1.indexOf("cd") );
        console.log( 'str1.indexOf("张三")',str1.indexOf("张三") );
        console.log( 'str1.lastIndexOf("cd")',str1.lastIndexOf("cd") );

        // 5. replace()	在字符串中搜索模式，并返回替换第一个匹配项后的字符串。
        //    replaceAll()	在字符串中搜索模式，并返回替换所有匹配项后的新字符串。
        let str2 = "0123456789456";
        let tempStr = str2.replace("4","-");
        console.log(str2 , tempStr);
        
        let tempStr1 = str2.replace("456","******");
        console.log(str2 , tempStr1);

        let tempStr2 = str2.replace("","-");
        console.log(str2 , tempStr2);


        let tempStr3 = str2.replaceAll("4","-");
        console.log(str2 , tempStr3);
        
        let tempStr4 = str2.replaceAll("456","******");
        console.log(str2 , tempStr4);

        let tempStr5 = str2.replaceAll("","-");
        console.log(str2 , tempStr5);

        let str3 = "0123456789";
        // slice(start,end)	提取字符串的一部分并返回新字符串。 [start,end)
        let tempStr6 = str3.slice(3);  // [3,length)
        console.log(tempStr6);

        let tempStr7 = str3.slice(3,8);  // [3,8)
        console.log(tempStr7);

        let str4 = "aaa-aaa-aaaa-aaaa-aaaa";
        // split()	将字符串拆分为子字符串数组。
        let strArr = str4.split("-");
        console.log(strArr);
        
        let str5 = "aaa-*aaa-*aaaa*-aaaa-*aaaa";
        let strArr1 = str5.split("-*");
        console.log(strArr1);

        let str6 = "aaa-aaa-aaaa-aaaa-aaaa";
        // split()	将字符串拆分为子字符串数组。
        let strArr3 = str6.split("-",3); // 将分割结果保留三个有效分割元素
        console.log(strArr3);


        // substring()	提取字符串中两个指定索引（位置）之间的字符。
        let str7 = "0123456789";
        let tempStr8 = str7.substring(3);
        console.log( tempStr8 );
        
        let tempStr9 = str7.substring(3,8);
        console.log( tempStr9 );

        // start > end 时，会交互变量值
        let tempStr10 = str7.substring(6,2);
        console.log( tempStr10 );


        // trim()	返回去除空格的字符串。
        // trimEnd()	返回去除末尾空格的字符串。
        // trimStart()	返回去除开头空格的字符串。
        let str8 = "     abc    abc     ";
        console.log("str8-start"+ str8 +"str8-end");
        console.log("str8-start" + str8.trim() + "str8-end");
        
        // 定义一个方法，接受一个字符串参数，返回返回反转后的字符串
        //      "abcde" => "edcba"
        function resStr(str){
            let temp = "";
            // for (let i = 0; i < str.length; i++) {
            //     temp = str.at(i) + temp;
            // }
            for (let i = str.length-1; i >= 0; i--) {
                temp = temp + str.at(i)
            }
            return temp;
        }

        let str9 = resStr("abcde")
        console.log(str9);
        
    </script>
</head>
<body>
    
</body>
</html>